Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2022-CVPR-[Dist-PU] Positive-Unlabeled Learning from a Label Distribution Perspective

https://openaccess.thecvf.com/content/CVPR2022/papers/Zhao_Dist-PU_Positive-Unlabeled_Learning_From_a_Label_Distribution_Perspective_CVPR_2022_paper.pdf

Introduction

PUのCost-sensitiveの研究は、Negative Assumptionといって過度にデータをNegativeに分類させてしまう。以下のように、全体の割合の0.4から大きく逸脱することになる。

Image in a image block

なので、U Dataについての予測した各サンプルのスコアの平均とClass Priorが大きく逸れないようにしたい。だが、明示的な解としてすべてのUの予測がπ\piになってしまうのがあるので、それを防ぐためにEntropyの項をつけた。

Methodology

  • xXRd\mathbf{x} \in X \subseteq \mathbb{R}^dで、Ground Truthのラベルy=1y=1はPでy=0y=0がN。
  • 2setのいずれでも問題はない。

Cost-sensitiveの式で導いた時、

  • Pの部分のcalibrateされた予測値の和は1にならないといけない。
  • Uの部分のcalibrateされた予測値の和はπ\piにならないといけない。

この2点がこの手法の提案の核心。

本体の式

nnPUの式は以下のようになる。

πE+[l(g(x),+1)]+πE+[l(g(x),1)]+EX[l(g(x),1)]\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + |-\pi \mathbb{E}_+[l(g(\mathbf{x}), -1)] + \mathbb{E}_X[l(g(\mathbf{x}), -1)]|

だが、今回は以下のようなclippingをする。

2πE+[l(g(x),+1)]+EX[l(g(x),1)]π2\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi|

実際はg(x)g(\mathbf{x})の出力値をlogitとして扱いsigmoid関数ffをかませて、f(g(x))f(g(\mathbf{x}))がクラスの予測確率である。そして、予測したラベルは本来離散的であるべきだが、これからの計算の都合上連続的であるようにする

具体的には、あるデータ群に対するラベルの平均は、f(g(x))f(g(\mathbf{x}))の予測値の平均をとる感じである。この平均について、P全体では1に、U全体ではπ\piになるようにしたい。

これは、以上のclippingされた式に対して、次のように目的の値からのズレで評価し、MAE損失を使う

2πE+[l(g(x),+1)]+EX[l(g(x),1)]πRlab=2πE+[f(g(x))]1+EX[l(g(x),1)]π2\pi \mathbb{E}_+[l(g(\mathbf{x}), +1)] + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi| \rightarrow \\ R_{lab} = 2\pi |\mathbb{E}_+[f(g(\mathbf{x}))] - 1| + | \mathbb{E}_X[l(g(\mathbf{x}), -1)] - \pi|

だが、このままではすべてのUの予測がπ\piに収束するような自明な解に収束してしまう。これを防ぐために、以下のような選択をする。

Entropy Minimization

Uがすべてπ\piにならなくするには、Entropy Minimizationをさせて、全体的に極端な予測を行わせるようにする。Uのすべてのデータについて行う。

s=f(g(x))Lent=EX[(1s)log(1s)+slogs]s = f(g(\mathbf{x}))\\ L_{ent} = - \mathbb{E}_X[(1 - s) \log (1 - s) + s \log s]

Confirmation Bias

Entropy Minimizationは明確に分けるという目的を達成できるが、一方本来曖昧なものを極端に推し進めてしまうのもある。最初に間違えた予測のまま拡大されたら、まずい。

これはConfirmation Biasという。

これを解決するため、データを以下のようにMixupする。

Image in a image block

そして、このようにMix-upしたデータに対して、以下のようにBinary Cross Entropyで損失を追加で計算する。

s=f(g(λx1+(1λ)x2))Lmix=E(x1,x2)[λlbce(s,s1)+(1λ)lbce(s,s2)]s^\prime = f(g(\lambda^\prime \mathbf{x}_1 + (1 - \lambda^\prime) \mathbf{x}_2))\\ L_{mix} = \mathbb{E}_{(\mathbf{x}_1, \mathbf{x}_2)} [\lambda^\prime l_{bce}(s^\prime, s_1) + (1 - \lambda^\prime) l_{bce}(s^\prime, s_2)]

これによって、曖昧なものを極端に推し進めづらくすることができる。

最後に、Mixupされたデータについても、Entropy Minimizationも行う。

全体

ということで、全体では以下のようになる。

Image in a image block
  • 本体
  • 本体のEntropy Minimization。
  • ミニバッチ内のMixup。
  • ミニバッチ内のMixupされたデータのEntropy Minimization。

実際の実装では、

  1. 単純の「本体」と「本体のEntropy Minimization」だけでWarm Up。
    1. lr=5e-4, 60epochs 走らせる。
  2. 「ミニバッチ内のMixup」と「ミニバッチ内のMixupされたデータのEntropy Minimization」を訓練に使う。(与えられたデータを純粋にそのまま学習に使うことはもうない)

ハイパーパラメタについては以下のように使っていた。α\alphaはmixupのパラメタ。

μ[0,0.1],ν[0,10],γ[0,0.3],α[0.1,10]\mu \in [0, 0.1] , \nu \in [0, 10], \gamma \in [0, 0.3], \alpha \in [0.1, 10]

スケジューラはcosineスケジューラを使った。

実験

  • Adamを使用して、 lr=5e-4, weight_decay = 5e-3
  • mix-upは重要。
    • そこで使われるβ分布のα\alphaは適切に大きいのは重要である。
  • DistPUはclass priorを間違えてもある程度強い。